/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.pucp.Reportes.Controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFileChooser;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
import pe.edu.pucp.Modelo.Ciudad;
import pe.edu.pucp.Modelo.Continente;
import pe.edu.pucp.Modelo.Pais;
import pe.edu.pucp.Modelo.Permiso;
import pe.edu.pucp.Modelo.Usuario;
import pe.edu.pucp.Reportes.DAO.ReporteCancelacionDAO;
import pe.edu.pucp.Reportes.Vista.ReporteCancelacionGUI;
import pe.edu.pucp.Util.Constante;
import pe.edu.pucp.Util.LogHelper;
import pe.edu.pucp.Util.Reportclass.Img;
import pe.edu.pucp.Util.Reportclass.RepCancelaciones;
import pe.edu.pucp.Util.Reportclass.RepCancelacionesDataSource;
import pe.edu.pucp.Util.ValHelper;

/**
 *
 * @author jorge
 */
public class ReporteCancelacionControlador {
    private ReporteCancelacionDAO dao;
    private ReporteCancelacionGUI view;
    private ArrayList<RepCancelaciones> lstRepCancelaciones;
    private ArrayList<Continente> lstContinenteOrigen;
    private ArrayList<Continente> lstContinenteDestino;
    private ArrayList<Pais> lstPaisOrigen;
    private ArrayList<Pais> lstPaisDestino;    
    private ArrayList<Ciudad> lstCiudadOrigen;    
    private ArrayList<Ciudad> lstCiudadDestino;
    private Usuario usr;
       
    public ReporteCancelacionControlador(ReporteCancelacionDAO rcdao, ReporteCancelacionGUI rcview, Usuario user){
        dao=rcdao;
        view=rcview;
        usr = user;
        view.mostrarPermisos(new  ArrayList<Permiso>(user.getPerfil().getPermisos()));
           
        llenarContinenteOrigenCombo();
        view.llenarComboPaisOrigen(null);
        view.llenarComboCiudadOrigen(null);    
        llenarContinenteDestinoCombo();
        view.llenarComboPaisDestino(null);
        view.llenarComboCiudadDestino(null);    
    
        view.addCambiarContinenteOrigen(new cambiarLstPaisOrigen());
        view.addCambiarPaisOrigen(new cambiarLstCiudadOrigen());      
        view.addCambiarContinenteDestino(new cambiarLstPaisDestino());
        view.addCambiarPaisDestino(new cambiarLstCiudadDestino());               
        view.addBuscarListener(new listarCancelacion());
        view.addLimpiarListener(new limpiar());
        view.addGenerarListener(new Generar());
//        view.addCarpeta(new ReporteCancelacionControlador.AbrirFile()); 
        
        lstRepCancelaciones = dao.listarCancelacion();                                             
        view.llenaGrilla(lstRepCancelaciones);                 
            
    }

    class listarCancelacion implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {            
            int conto = view.getContinenteOrigen()<0? -1: lstContinenteOrigen.get(view.getContinenteOrigen()).getIdcontinente();
            int paiso = view.getPaisOrigen()<0? -1: lstPaisOrigen.get(view.getPaisOrigen()).getIdpais();
            int ciudo = view.getCiudadOrigen()<0? -1: lstCiudadOrigen.get(view.getCiudadOrigen()).getIdciudad();              
            int contd = view.getContinenteDestino()<0? -1: lstContinenteDestino.get(view.getContinenteDestino()).getIdcontinente();
            int paisd = view.getPaisDestino()<0? -1: lstPaisDestino.get(view.getPaisDestino()).getIdpais();
            int ciudd = view.getCiudadDestino()<0? -1: lstCiudadDestino.get(view.getCiudadDestino()).getIdciudad();   
            lstRepCancelaciones = dao.listarCancelacion(conto,paiso,ciudo,contd,paisd,ciudd,view.getFechaInicio(),view.getFechaFin());
            view.llenaGrilla(lstRepCancelaciones);  
        }
    }     
    
    private void llenarContinenteOrigenCombo(){
        lstContinenteOrigen = dao.listarContinente();
        view.llenarComboContinenteOrigen(lstContinenteOrigen);
    }

    private void llenarPaisOrigenCombo(Continente cont){
        lstPaisOrigen= dao.listarPais(cont.getIdcontinente());
        view.llenarComboPaisOrigen(lstPaisOrigen);
    }       
    
    private void llenarCiudadOrigenCombo(Pais pa){
        lstCiudadOrigen = dao.listarCiudad(pa.getIdpais());
        view.llenarComboCiudadOrigen(lstCiudadOrigen);
    }
    
    private void llenarContinenteDestinoCombo(){
        lstContinenteDestino = dao.listarContinente();
        view.llenarComboContinenteDestino(lstContinenteDestino);
    }    

    private void llenarPaisDestinoCombo(Continente cont){
        lstPaisDestino= dao.listarPais(cont.getIdcontinente());
        view.llenarComboPaisDestino(lstPaisDestino);
    }    
    
    private void llenarCiudadDestinoCombo(Pais pa){
        lstCiudadDestino = dao.listarCiudad(pa.getIdpais());
        view.llenarComboCiudadDestino(lstCiudadDestino);
    }    
//    
//    class AbrirFile implements ActionListener {
//        @Override
//        public void actionPerformed(ActionEvent e) {
//        JFileChooser filechooser = new JFileChooser();
//        filechooser.setMultiSelectionEnabled(false); 
//        filechooser.setDialogTitle("Escoger carpeta");
//         filechooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
//        int result = filechooser.showOpenDialog(null); 
//        if (result == JFileChooser.APPROVE_OPTION){
//            File f = filechooser.getSelectedFile();
//            view.setpath(f.getPath());
//            }
//        }         
//        }
    
    class cambiarLstPaisOrigen implements ItemListener{
        @Override
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange()== ItemEvent.SELECTED){                
                if (view.getContinenteOrigen()>=0){ llenarPaisOrigenCombo(lstContinenteOrigen.get(view.getContinenteOrigen())); }
                else{ view.llenarComboPaisOrigen(null); }                      
            }
        }        
    }  
    
    class cambiarLstCiudadOrigen implements ItemListener{
        @Override
        public void itemStateChanged(ItemEvent e) {            
            if (e.getStateChange()== ItemEvent.SELECTED){
                if (view.getPaisOrigen()>=0) { llenarCiudadOrigenCombo(lstPaisOrigen.get(view.getPaisOrigen())); }
                else { view.llenarComboCiudadOrigen(null); }
            }
        }        
    }      
     
    class cambiarLstPaisDestino implements ItemListener{
        @Override
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange()== ItemEvent.SELECTED){
                if (view.getContinenteDestino()>=0) { llenarPaisDestinoCombo(lstContinenteDestino.get(view.getContinenteDestino())); }
                else { view.llenarComboPaisDestino(null); }
            }
        }        
    }  
    
    class cambiarLstCiudadDestino implements ItemListener{
        @Override
        public void itemStateChanged(ItemEvent e) {            
            if (e.getStateChange()== ItemEvent.SELECTED){
                if (view.getPaisDestino()>=0) { llenarCiudadDestinoCombo(lstPaisDestino.get(view.getPaisDestino())); }
                else { view.llenarComboCiudadDestino(null); }
            }
        }        
    }      
    
    class limpiar implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            view.LimpiarDatos();
        }        
    }     
    
    class Generar implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {     
            if(lstRepCancelaciones.isEmpty()){
                ValHelper.mostrarError("No hay datos para generar el PDF");
            }
            if (lstRepCancelaciones.size()>1){
            try {            
                RepCancelacionesDataSource datasource = new RepCancelacionesDataSource();            
                for (int i=0;i<lstRepCancelaciones.size();i++){                
                    datasource.addRepCancelaciones(lstRepCancelaciones.get(i));                
                }      
                
                HashMap hs = new HashMap(); 
        
                hs.put("creador", usr.getNombre() + " "+usr.getAppaterno() + " "+usr.getApmaterno());
                
                String master = System.getProperty("user.dir");
                master += "/../SIGEPA_sist/src/main/resources/Recurso/jasper/Estadistico.jasper";
                JasperReport reporte = (JasperReport)JRLoader.loadObjectFromFile(master);                
//                Map<String,String> parametros = new HashMap<>();
                
                JasperPrint jasperPrint;
                jasperPrint = JasperFillManager.fillReport(reporte, hs, datasource);
                
                JasperViewer.viewReport(jasperPrint,false);
                
            } catch (JRException ex) { }                        
        }
            
            if (lstRepCancelaciones.size()==1){
                
                List listaimg = new ArrayList();
        
                Img a = new Img("No generado por peticion del usuario",lstRepCancelaciones.get(0).getCancelCli());
                Img b = new Img("No generado por no haber ruta",lstRepCancelaciones.get(0).getCancelAlg());
                Img c = new Img("Se realizaron esos envios",lstRepCancelaciones.get(0).getRealizados());
                
                listaimg.add(a);
                listaimg.add(b);
                listaimg.add(c);
                  
                
                HashMap hs = new HashMap(); 
        
                hs.put("Aorigen",lstRepCancelaciones.get(0).getOrigen());
                hs.put("Adestino", lstRepCancelaciones.get(0).getDestino());
                hs.put("creador", usr.getNombre() + " "+usr.getAppaterno() + " "+usr.getApmaterno());
            
                JasperReport reporte = null;                
                try {
                    String master = System.getProperty("user.dir");
                    master += "/../SIGEPA_sist/src/main/resources/Recurso/jasper/Estadisticov2.jasper";
                    reporte = (JasperReport)JRLoader.loadObject(master);
                    //                Map<String,String> parametros = new HashMap<>();
                } catch (JRException ex) {
                    Logger.getLogger(ReporteCancelacionControlador.class.getName()).log(Level.SEVERE, null, ex);
                }
                
                JasperPrint jasperPrint = null;
                try {
                    jasperPrint = JasperFillManager.fillReport(reporte, hs, new JRBeanCollectionDataSource(listaimg));
                } catch (JRException ex) {
                    Logger.getLogger(ReporteCancelacionControlador.class.getName()).log(Level.SEVERE, null, ex);
                }
                
                JasperViewer.viewReport(jasperPrint,false);
                                              
            } 
                
            }
    }
    }   
    
    
